/* file per la classe Vector2D */

#ifndef _VECTOR_H_
#define _VECTOR_H_

#include <GL/glfw.h>
#include <math.h>
#include <stdio.h>

#define null '\0'

class Vector2D
{
	private:
		
	
	public:
		GLfloat x, y;
		
		Vector2D(void);
		Vector2D(GLfloat x, GLfloat y);
		~Vector2D(void);
		Vector2D(const Vector2D &vector);
		
		/* prodotto scalare */
		const Vector2D operator/(const GLfloat val) const;
		const Vector2D operator*(const GLfloat val) const;
		void operator*=(const GLfloat val);
		
		/* somma vettoriale */
		Vector2D operator+(const Vector2D &vect);
		void operator+=(const Vector2D &vect);
		void operator-=(const Vector2D &vect);
		Vector2D operator-(const Vector2D &vect);
		
		/* somma vettoriale scalata */
		void addScaledVector(Vector2D &v, float scale);
		void addScaledVector(Vector2D *v, float scale);
		
		/* inverte le componenti */
		Vector2D operator-();
		
		const Vector2D &operator=(const Vector2D &vect);
		
		/* setters / getters */
		GLfloat getX(void);
		GLfloat getY(void);
		void setX(GLfloat xx);
		void setY(GLfloat yy);
	
		/* moltiplica il vettore per uno scalare */
		void mul(GLfloat val);
		/* riduce il vettore di un fattore (1.0f = 100%, 0.5f = la meta') */
		void reduce(GLfloat factor);
		/* annulla le componenti del vettore */
		void clear(void);
		
		/* restituisce la magnitudine del vettore */
		float magnitude();
		float squaredMagnitude();
		
		/* normalizza il vettore */
		void normalize();
		
		void add(Vector2D *vect);
		bool isNull(void);
	
};


#endif
